package com.zpz.framework.zpzoauth.common.utils;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * @author zhangpanzhi
 * @time 2019-07-09
 * @description 未经本人允许请勿随便改动，尊重劳动
 * */
public class ZpzOauthValidUtil {

	/**
	 * 仅支持输入大小写字母、数字；至少2位；最长50位
	 * 登陆用户名格式
	 */
	public static boolean checkUserName(String value) {
		boolean flag = false;
		Pattern p1 = null;
		Matcher m = null;
		p1 = Pattern.compile("[a-zA-Z0-9]{2,50}");
		m = p1.matcher(value);
		flag = m.matches();
		return flag;
	}
	/**
	 * 仅支持输入大小写字母、数字、汉字；至少2位；最长15位
	 * 登陆用户名格式
	 */
	public static boolean checkName(String value) {
		boolean flag = false;
		Pattern p1 = null;
		Matcher m = null;
		p1 = Pattern.compile("[a-zA-Z0-9_\\u4e00-\\u9fa5]{2,15}");
		m = p1.matcher(value);
		flag = m.matches();
		return flag;
	}
	/**
	 * 大小写字母,数字,特殊字符中的至少3种.8位以上,正确返回true
	 * @name: rexCheckPassword
	 * @author: zhangpanzhi
	 * @createDate: 2021/1/29 9:06
	 * @param input
	 * @return: boolean
	 * @throws:
	 */
	public static boolean rexCheckPassword(String input) {
		// 8-20 位，字母、数字、字符
		String regStr = "^(?![a-zA-Z]+$)(?![A-Z0-9]+$)(?![A-Z\\W_]+$)(?![a-z0-9]+$)(?![a-z\\W_]+$)(?![0-9\\W_]+$)[a-zA-Z0-9\\W_]{8,20}$";
		return input.matches(regStr);
	}
	/**
	 * 密码的正则表达式（6-15位数字和字母的组合）
	 * @name: rexCheckPassword
	 * @author: zhangpanzhi
	 * @createDate: 2021/1/29 9:13
	 * @param input
	 * @return: boolean
	 * @throws:
	 */
	public static boolean rexCheckPasswordNw(String input) {
		// 8-20 位，字母、数字、字符
		String regStr = "^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{6,15}$";
		return input.matches(regStr);
	}
	/**
	 * 复杂度要求：
	 * 大写、小写、数字、特殊字符，需要包含其中至少三项
	 * @name: isComplexityMatches
	 * @author: zhangpanzhi
	 * @createDate: 2021/1/29 9:12
	 * @param content
	 * @return: boolean
	 * @throws:
	 */
	private boolean isComplexityMatches(String content){

		//1.全部包含：大写、小写、数字、特殊字符；
		String regex1 = "(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*[\\W_])^.*$";

		//2.无大写：小写、数字、特殊字符；
		String regex2 = "(?=.*[a-z])(?=.*[0-9])(?=.*[\\W_])^.*$";

		//3.无小写：大写、数字、特殊字符；
		String regex3 = "(?=.*[A-Z])(?=.*[0-9])(?=.*[\\W_])^.*$";

		//4.无数字：大写、小写、特殊字符；
		String regex4 = "(?=.*[A-Z])(?=.*[a-z])(?=.*[\\W_])^.*$";

		//5.无特殊字符：大写、小写、数字；
		String regex5 = "(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])^.*$";

		String regex = "(" + regex1 + ")|(" + regex2 + ")|(" + regex3 + ")|(" + regex4 + ")|(" + regex5 + ")";

		return content.matches(regex);
	}

	/**
	 * 仅支持输入大小写字母、数字；至少6位；最长15位
	 */
	public static boolean checkUserPwd(String value) {
		boolean flag = false;
        Pattern p1  = Pattern.compile("[a-zA-Z0-9]{6,15}");
        Matcher m = p1.matcher(value);
		flag = m.matches();
		return flag;
	}
	/**
	 * 支付密码 支付密码为六位数字，密码不能为重复、连续的数字
	 */
	public static boolean checkPayPwd(String value) {
		String regex = "^(\\d)\\1{2}(\\d)\\2{2}$";
		return value.matches(regex);
	}
	/**
	 * 至少6-15位，支持数字、字母、标点符号
	 * 密码格式
	 */
	public static boolean checkPassword(String value) {
		boolean flag = false;
		Pattern p1 = Pattern.compile("[a-zA-Z0-9\\.\\?\\!\\,\\:\\;\\-\\–\\—\\(\\)\\[\\]\\{\\}\\'\\\"\\`]{6,15}");
		Matcher m = p1.matcher(value);
		flag = m.matches();
		return flag;
	}

	/**
	 * 校验邮箱格式
	 */
	public static boolean checkEmail(String value) {
		boolean flag = false;
		Pattern p1 = null;
		Matcher m = null;
		p1 = Pattern.compile("\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*");
		m = p1.matcher(value);
		flag = m.matches();
		return flag;
	}

	/**
	 * 手机号验证
	 *
	 * @param str
	 * @return 验证通过返回true
	 */
	public static boolean isMobile(final String str) {
		Pattern p = null;
		Matcher m = null;
		boolean b = false;
		p = Pattern.compile("^[1][3,4,5,6,7,8,9][0-9]{9}$"); // 验证手机号
		m = p.matcher(str);
		b = m.matches();
		return b;
	}

	/**
	 * 电话号码验证
	 *
	 * @param str
	 * @return 验证通过返回true
	 */
//	public static boolean isPhone(final String str) {
//		Pattern p1 = null, p2 = null;
//		Matcher m = null;
//		boolean b = false;
//		p1 = Pattern.compile("^[0][1-9][0-9]{1,2}[0-9]{5,10}$"); // 验证带区号的
//		p2 = Pattern.compile("^[1-9]{1}[0-9]{5,8}$"); // 验证没有区号的
//		if (str.length() > 9) {
//			m = p1.matcher(str);
//			b = m.matches();
//		} else {
//			m = p2.matcher(str);
//			b = m.matches();
//		}
//		return b;
//	}

	/**
	 * 产品要求的：
	 * 1.支持输入数字，中英文字符的横线
	 * 2.位数不用校验
	 * @author zhangpanzhi 2018年4月24日
	 * @param str
	 * @return
	 */
	public static boolean isPhone(final String str) {
		boolean b = false;
		Pattern p1 = Pattern.compile("[0-9|-]{1,20}"); // 验证带区号的
		Matcher m = p1.matcher(str);
		b = m.matches();
		return b;
	}


	public static void main(String[] args) {
		boolean b = checkName("张三1");
		System.out.println(b);
//		System.out.println(isPhone("1"));
//		System.out.println(isPhone("123242343245325"));
//		System.out.println(isPhone("123242343245325---"));
//		System.out.println(isPhone("---1232423--43245325"));
//		System.out.println(isPhone("1232423----43245325"));
//		System.out.println(checkUserName("_____"));
//		System.out.println(checkPassword("12"));
//		System.out.println(checkPassword("1a"));
//		System.out.println(checkPassword("1a"));
//		System.out.println(checkPassword("123456.,;!'[]{}"));
//		System.out.println(checkPassword("1a@{}[454"));
//		System.out.println(checkPassword("1a@{  }[454"));

	}
}
